From fff7809ac8c2301a19ad26000e335c2e9616cb97 Mon Sep 17 00:00:00 2001 From: "awilliam@xenbuild.aw" Date: Thu, 6 Apr 2006 15:51:59 -0600 Subject: [PATCH] [IA64] cleanup in regionreg.c get_impl_rid_bits: use pal call to get implemented_rid_bits. clean up in regionreg.c Signed-off-by: Tristan Gingold --- xen/arch/ia64/xen/process.c | 3 -- xen/arch/ia64/xen/regionreg.c | 59 ++++++-------------------------- xen/arch/ia64/xen/vcpu.c | 1 - xen/arch/ia64/xen/xenmisc.c | 1 - xen/include/asm-ia64/regionreg.h | 5 +++ 5 files changed, 16 insertions(+), 53 deletions(-) diff --git a/xen/arch/ia64/xen/process.c b/xen/arch/ia64/xen/process.c index 311ebc313f..50e70b1c8d 100644 --- a/xen/arch/ia64/xen/process.c +++ b/xen/arch/ia64/xen/process.c @@ -37,7 +37,6 @@ extern void die_if_kernel(char *str, struct pt_regs *regs, long err); /* FIXME: where these declarations shold be there ? */ -extern void load_region_regs(struct vcpu *); extern void panic_domain(struct pt_regs *, const char *, ...); extern long platform_is_hp_ski(void); extern int ia64_hyperprivop(unsigned long, REGS *); @@ -45,8 +44,6 @@ extern int ia64_hypercall(struct pt_regs *regs); extern void vmx_do_launch(struct vcpu *); extern unsigned long lookup_domain_mpa(struct domain *,unsigned long); -extern unsigned long dom0_start, dom0_size; - #define IA64_PSR_CPL1 (__IA64_UL(1) << IA64_PSR_CPL1_BIT) // note IA64_PSR_PK removed from following, why is this necessary? #define DELIVER_PSR_SET (IA64_PSR_IC | IA64_PSR_I | \ diff --git a/xen/arch/ia64/xen/regionreg.c b/xen/arch/ia64/xen/regionreg.c index 727376f76d..b665e794f8 100644 --- a/xen/arch/ia64/xen/regionreg.c +++ b/xen/arch/ia64/xen/regionreg.c @@ -52,7 +52,7 @@ ia64_set_rr (unsigned long rr, unsigned long rrv) #endif // use this to allocate a rid out of the "Xen reserved rid block" -unsigned long allocate_reserved_rid(void) +static unsigned long allocate_reserved_rid(void) { static unsigned long currentrid = XEN_DEFAULT_RID+1; unsigned long t = currentrid; @@ -91,14 +91,14 @@ int deallocate_metaphysical_rid(unsigned long rid) static int implemented_rid_bits = 0; static struct domain *ridblock_owner[MAX_RID_BLOCKS] = { 0 }; -void get_impl_rid_bits(void) +static void get_impl_rid_bits(void) { - // FIXME (call PAL) -//#ifdef CONFIG_MCKINLEY - implemented_rid_bits = IA64_MAX_IMPL_RID_BITS; -//#else -//#error "rid ranges won't work on Merced" -//#endif + pal_vm_info_2_u_t vm_info_2; + + /* Get machine rid_size. */ + BUG_ON (ia64_pal_vm_summary (NULL, &vm_info_2) != 0); + implemented_rid_bits = vm_info_2.pal_vm_info_2_s.rid_size; + if (implemented_rid_bits <= IA64_MIN_IMPL_RID_BITS || implemented_rid_bits > IA64_MAX_IMPL_RID_BITS) BUG(); @@ -177,31 +177,13 @@ int deallocate_rid_range(struct domain *d) return 1; } - -static inline void -set_rr_no_srlz(unsigned long rr, unsigned long rrval) -{ - ia64_set_rr(rr, vmMangleRID(rrval)); -} - -void +static void set_rr(unsigned long rr, unsigned long rrval) { ia64_set_rr(rr, vmMangleRID(rrval)); ia64_srlz_d(); } -static inline int validate_page_size(unsigned long ps) -{ - switch(ps) { - case 12: case 13: case 14: case 16: case 18: - case 20: case 22: case 24: case 26: case 28: - return 1; - default: - return 0; - } -} - // validates and changes a single region register // in the currently executing domain // Passing a value of -1 is a (successful) no-op @@ -280,8 +262,8 @@ int set_metaphysical_rr0(void) // validates/changes region registers 0-6 in the currently executing domain // Note that this is the one and only SP API (other than executing a privop) // for a domain to use to change region registers -int set_all_rr( u64 rr0, u64 rr1, u64 rr2, u64 rr3, - u64 rr4, u64 rr5, u64 rr6, u64 rr7) +static int set_all_rr(u64 rr0, u64 rr1, u64 rr2, u64 rr3, + u64 rr4, u64 rr5, u64 rr6, u64 rr7) { if (!set_one_rr(0x0000000000000000L, rr0)) return 0; if (!set_one_rr(0x2000000000000000L, rr1)) return 0; @@ -317,25 +299,6 @@ if (!v->vcpu_info) { printf("Stopping in init_all_rr\n"); dummy(); } /* XEN/ia64 INTERNAL ROUTINES */ -unsigned long physicalize_rid(struct vcpu *v, unsigned long rrval) -{ - ia64_rr rrv; - - rrv.rrval = rrval; - rrv.rid += v->arch.starting_rid; - return rrv.rrval; -} - -unsigned long -virtualize_rid(struct vcpu *v, unsigned long rrval) -{ - ia64_rr rrv; - - rrv.rrval = rrval; - rrv.rid -= v->arch.starting_rid; - return rrv.rrval; -} - // loads a thread's region register (0-6) state into // the real physical region registers. Returns the // (possibly mangled) bits to store into rr7 diff --git a/xen/arch/ia64/xen/vcpu.c b/xen/arch/ia64/xen/vcpu.c index 3cf29c5971..8e7e739191 100644 --- a/xen/arch/ia64/xen/vcpu.c +++ b/xen/arch/ia64/xen/vcpu.c @@ -23,7 +23,6 @@ extern void getreg(unsigned long regnum, unsigned long *val, int *nat, struct pt_regs *regs); extern void setreg(unsigned long regnum, unsigned long val, int nat, struct pt_regs *regs); extern void panic_domain(struct pt_regs *, const char *, ...); -extern int set_metaphysical_rr0(void); extern unsigned long translate_domain_pte(UINT64,UINT64,UINT64); extern unsigned long translate_domain_mpaddr(unsigned long); extern void ia64_global_tlb_purge(UINT64 start, UINT64 end, UINT64 nbits); diff --git a/xen/arch/ia64/xen/xenmisc.c b/xen/arch/ia64/xen/xenmisc.c index a2b68356d5..239ae441e2 100644 --- a/xen/arch/ia64/xen/xenmisc.c +++ b/xen/arch/ia64/xen/xenmisc.c @@ -29,7 +29,6 @@ int phys_proc_id[NR_CPUS]; unsigned long loops_per_jiffy = (1<<12); // from linux/init/main.c /* FIXME: where these declarations should be there ? */ -extern void load_region_regs(struct vcpu *); extern void show_registers(struct pt_regs *regs); void ia64_mca_init(void) { printf("ia64_mca_init() skipped (Machine check abort handling)\n"); } diff --git a/xen/include/asm-ia64/regionreg.h b/xen/include/asm-ia64/regionreg.h index cd4077b301..3c019381fc 100644 --- a/xen/include/asm-ia64/regionreg.h +++ b/xen/include/asm-ia64/regionreg.h @@ -65,6 +65,7 @@ vmMangleRID(unsigned long RIDVal) #define vmUnmangleRID(x) vmMangleRID(x) extern unsigned long allocate_metaphysical_rr(void); +extern int deallocate_metaphysical_rid(unsigned long rid); struct domain; extern int allocate_rid_range(struct domain *d, unsigned long ridbits); @@ -73,4 +74,8 @@ extern int deallocate_rid_range(struct domain *d); struct vcpu; extern void init_all_rr(struct vcpu *v); +extern int set_metaphysical_rr0(void); + +extern void load_region_regs(struct vcpu *v); + #endif /* !_REGIONREG_H_ */ -- 2.30.2